package 简单.其他;

/**
 * 给你一个仅由字符 '0' 和 '1' 组成的字符串 s 。一步操作中，
 * 你可以将任一 '0' 变成 '1' ，或者将 '1' 变成 '0' 。
 * 交替字符串 定义为：如果字符串中不存在相邻两个字符相等的情况，
 * 那么该字符串就是交替字符串。例如，字符串 "010" 是交替字符串，
 * 而字符串 "0100" 不是。
 * 返回使 s 变成 交替字符串 所需的 最少 操作数。
 *  
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/minimum-changes-to-make-alternating-binary-string
 */
public class 生成交替二进制字符串的最少操作数_1758 {

    public static void main(String[] args) {

        System.out.println('0' ^ '1');
        System.out.println(minOperations("0100"));

    }

    public static int minOperations(String s) {
        int count1 = 0, count2 = 0;
        char bit1 = '1', bit2 = '0';

        for (char c : s.toCharArray()) {
            if (bit1 != c) {
                count1++;
            }
            if (bit2 != c) {
                count2++;
            }
            bit1 ^= 1;
            bit2 ^= 1;
        }

        return Math.min(count1, count2);
    }

}
